
import { createEnv } from "@t3-oss/env-nextjs"
import { z } from "zod"


const isInVercel = process.env.VERCEL === "1"

const vercelUrl = `https://${process.env.VERCEL_URL}`

const APP_URL = process.env.APP_URL
    ? process.env.APP_URL
    : isInVercel
        ? vercelUrl
        : 'http://localhost:3000'

// only throw error in server mode and server side
// if (typeof window === "undefined" && !APP_URL) {
//   throw new Error("`APP_URL` is required in server mode")
// }

const ASSISTANT_INDEX_URL =
    "https://registry.npmmirror.com/@lobehub/agents-index/v1/files/public"

const PLUGINS_INDEX_URL = "https://chat-plugins.lobehub.com"

export const getAppConfig = () => {
  const ACCESS_CODES = process.env.ACCESS_CODE?.split(",").filter(Boolean) || []

  return createEnv({
    client: {
      NEXT_PUBLIC_BASE_PATH: z.string(),
      NEXT_PUBLIC_ENABLE_SENTRY: z.boolean()
    },
    server: {
      ACCESS_CODES: z.any(z.string()).optional(),

      AGENTS_INDEX_URL: z.string().url(),

      DEFAULT_AGENT_CONFIG: z.string(),
      SYSTEM_AGENT: z.string().optional(),

      PLUGINS_INDEX_URL: z.string().url(),
      PLUGIN_SETTINGS: z.string().optional(),

      APP_URL: z.string().optional(),
      VERCEL_EDGE_CONFIG: z.string().optional(),

      CDN_USE_GLOBAL: z.boolean().optional(),
      CUSTOM_FONT_FAMILY: z.string().optional(),
      CUSTOM_FONT_URL: z.string().optional(),

      SSRF_ALLOW_PRIVATE_IP_ADDRESS: z.boolean().optional(),
      SSRF_ALLOW_IP_ADDRESS_LIST: z.string().optional()
    },
    runtimeEnv: {
      NEXT_PUBLIC_BASE_PATH: process.env.NEXT_PUBLIC_BASE_PATH || "",

      // Sentry
      NEXT_PUBLIC_ENABLE_SENTRY: !!process.env.NEXT_PUBLIC_SENTRY_DSN,

      ACCESS_CODES: ACCESS_CODES,

      AGENTS_INDEX_URL: !!process.env.AGENTS_INDEX_URL
          ? process.env.AGENTS_INDEX_URL
          : ASSISTANT_INDEX_URL,

      DEFAULT_AGENT_CONFIG: process.env.DEFAULT_AGENT_CONFIG || "",
      SYSTEM_AGENT: process.env.SYSTEM_AGENT,

      PLUGINS_INDEX_URL: !!process.env.PLUGINS_INDEX_URL
          ? process.env.PLUGINS_INDEX_URL
          : PLUGINS_INDEX_URL,

      PLUGIN_SETTINGS: process.env.PLUGIN_SETTINGS,

      VERCEL_EDGE_CONFIG: process.env.VERCEL_EDGE_CONFIG,

      APP_URL,
      CUSTOM_FONT_FAMILY: process.env.CUSTOM_FONT_FAMILY,
      CUSTOM_FONT_URL: process.env.CUSTOM_FONT_URL,
      CDN_USE_GLOBAL: process.env.CDN_USE_GLOBAL === "1",

      SSRF_ALLOW_PRIVATE_IP_ADDRESS:
          process.env.SSRF_ALLOW_PRIVATE_IP_ADDRESS === "1",
      SSRF_ALLOW_IP_ADDRESS_LIST: process.env.SSRF_ALLOW_IP_ADDRESS_LIST
    }
  })
}

export const appEnv = getAppConfig()
